// 用户模块 后期自己写
import { reqLogin, reqGetUserInfo, reqGetUserDetailById } from '@/api/user'
import { setToken, getToken } from '@/utils/auth'
import { resetRouter } from '@/router'
export default {
  state: {
    token: getToken() || null,
    userInfo: {} // 个人信息
  },
  mutations: {
    // 设置tokenmutation
    setToken(state, newToken) {
      // 1. 存储token到vuex
      state.token = newToken
      // 2.存储token到cookie中
      setToken(newToken)
    },
    // 设置个人信息的mutation
    setUserInfo(state, info) {
      state.userInfo = info
    }
  },
  actions: {
    // 发送登录请求的action
    async loginAction(context, form) {
      const data = await reqLogin(form)
      // console.log(data)
      context.commit('setToken', data.data)
      return data // 这个return 添加的意义是在组件中根据success字段处理消息提示
    },
    // 获取个人信息的action
    async getUserInfo(context) {
      // 1. 获取基本信息
      const { data } = await reqGetUserInfo()
      // 2. 获取带头像的用户信息 携带第一次请求回来的数据的用户id
      const { data: data2 } = await reqGetUserDetailById(data.userId)
      // 将两次获取个人信息的数据合并 存储到vuex中
      context.commit('setUserInfo', { ...data, ...data2 })
      return { ...data, ...data2 } // 将合并好的个人信息返回, 后期要处理权限----挖坑
    },
    // 清除个人信息和token的action
    logout({ commit }) {
      // 1. 清除token
      commit('setToken', '')
      // 2. 清除个人信息
      commit('setUserInfo', {})
      // 3. 重置路由规则 提交另一个模块的mutation 参数1是模块名/mutation名, 参数, {root: true} 从根上找
      commit('permission/setRoutes', [], { root: true })
      // 4. 重置路由
      resetRouter()
    }
  },
  namespaced: true
}

